{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# RMSprop with `Gluon`\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-10-22T11:55:09.099805Z",
     "start_time": "2017-10-22T11:55:08.409275Z"
    }
   },
   "outputs": [],
   "source": [
    "import mxnet as mx\n",
    "from mxnet import autograd\n",
    "from mxnet import gluon\n",
    "from mxnet import ndarray as nd\n",
    "import numpy as np\n",
    "import random\n",
    "\n",
    "mx.random.seed(1)\n",
    "random.seed(1)\n",
    "\n",
    "# Generate data.\n",
    "num_inputs = 2\n",
    "num_examples = 1000\n",
    "true_w = [2, -3.4]\n",
    "true_b = 4.2\n",
    "X = nd.random_normal(scale=1, shape=(num_examples, num_inputs))\n",
    "y = true_w[0] * X[:, 0] + true_w[1] * X[:, 1] + true_b\n",
    "y += .01 * nd.random_normal(scale=1, shape=y.shape)\n",
    "dataset = gluon.data.ArrayDataset(X, y)\n",
    "\n",
    "net = gluon.nn.Sequential()\n",
    "net.add(gluon.nn.Dense(1))\n",
    "square_loss = gluon.loss.L2Loss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-10-22T11:55:09.331275Z",
     "start_time": "2017-10-22T11:55:09.101569Z"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib as mpl\n",
    "mpl.rcParams['figure.dpi']= 120\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def train(batch_size, lr, gamma, epochs, period):\n",
    "    assert period >= batch_size and period % batch_size == 0\n",
    "    net.collect_params().initialize(mx.init.Normal(sigma=1), force_reinit=True)\n",
    "    # RMSProp.\n",
    "    trainer = gluon.Trainer(net.collect_params(), 'rmsprop',\n",
    "                            {'learning_rate': lr, 'gamma1': gamma})\n",
    "    data_iter = gluon.data.DataLoader(dataset, batch_size, shuffle=True)\n",
    "    total_loss = [np.mean(square_loss(net(X), y).asnumpy())]\n",
    "    \n",
    "    for epoch in range(1, epochs + 1):\n",
    "        for batch_i, (data, label) in enumerate(data_iter):\n",
    "            with autograd.record():\n",
    "                output = net(data)\n",
    "                loss = square_loss(output, label)\n",
    "            loss.backward()\n",
    "            trainer.step(batch_size)\n",
    "\n",
    "            if batch_i * batch_size % period == 0:\n",
    "                total_loss.append(np.mean(square_loss(net(X), y).asnumpy()))\n",
    "        print(\"Batch size %d, Learning rate %f, Epoch %d, loss %.4e\" % \n",
    "              (batch_size, trainer.learning_rate, epoch, total_loss[-1]))\n",
    "\n",
    "    print('w:', np.reshape(net[0].weight.data().asnumpy(), (1, -1)), \n",
    "          'b:', net[0].bias.data().asnumpy()[0], '\\n')\n",
    "    x_axis = np.linspace(0, epochs, len(total_loss), endpoint=True)\n",
    "    plt.semilogy(x_axis, total_loss)\n",
    "    plt.xlabel('epoch')\n",
    "    plt.ylabel('loss')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-10-22T11:55:10.920660Z",
     "start_time": "2017-10-22T11:55:09.333109Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Batch size 10, Learning rate 0.030000, Epoch 1, loss 7.5963e-01\n",
      "Batch size 10, Learning rate 0.030000, Epoch 2, loss 1.4048e-04\n",
      "Batch size 10, Learning rate 0.030000, Epoch 3, loss 1.1444e-04\n",
      "w: [[ 2.00390077 -3.39570308]] b: 4.20971 \n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nRKRs/x9jH+v3KlgTdQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10eab66a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train(batch_size=10, lr=0.03, gamma=0.9, epochs=3, period=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Next\n",
    "[AdaDalta from scratch](../chapter06_optimization/adadelta-scratch.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For whinges or inquiries, [open an issue on  GitHub.](https://github.com/zackchase/mxnet-the-straight-dope)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
